package singletonMode;

/**
 * @author： pang-yun
 * @date： 2021-10-21 10:04
 * 功能目的 ：用于 使用静态内部类 完成
 *
 *   静态内部类的特点
 *   - 外部类装载时 静态内部类并不会随外部类装载  只有 return SingletonInstance.instance 调用静态内部类时 才会装载   起到懒加载 作用
 *   - 静态内部类 装载时 线程安全
 *
 *   这种方式 使用类装载机制保证了 初始化实例只有一个线程
 *   静态内部类方式在 singleton 类被装载时不会立即实例化 而是需要实例化时， 调用getInstance 方法 才会装载 singletonInstance 从而完成 singleton实例化
 *
 *   类的静态属性 只会在第一次加载类的时候初始化  jvm 帮助我们保证了线程的安全性  在类初始化时 别的线程是无法进入的
 *
 *   优点 : 避免了 线程不安全  利用静态内部类的特点 实现延迟加载 效率高
 */

public class SingleH {
    public static void main(String[] args) {
        SingletonH a = SingletonH.getInstance();
        SingletonH b = SingletonH.getInstance();

        System.out.println(a==b);



    }
}

class SingletonH{
    private SingletonH(){}

    private static class SingletonInstance{
        private static final SingletonH instance = new SingletonH();
    }

    public static SingletonH getInstance(){
        return SingletonInstance.instance;
    }
}